3.5
数据管理
学习目标:
说出
数据卷、数据容器是什么
应用
数据卷、数据容器的常见操作
docker
的
镜像是
只读
的,虽然
依据镜像创建的
容器
可以进行操作
,
但是
我们
不能将数据保存到容器中,因为容器会随时关闭和开启,那么如何将数据保存下来呢?
答案就是:数据卷和数据卷容器
3.5.1
数据卷
简介
这一节,我们从定义、命令详解
这两个方面来学习。
什么是数据卷?
就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储
缺点是:太单一了
docker
数据卷命令详解
# docker run --help
。。。
-v, --volume list Bind mount a volume (default [])
挂载一个数据卷,默认为空
我们可以使用命令
docker run
用来创建容器,可以在使用
docker run
命令时添加
-v
参数,就可以创建并挂载
一个到多个
数据卷到当前运行的容器中。
-v
参数的作用是将宿主机的一个目录
(
绝对路径
)
作为容器的数据卷挂载到
docker
容器中,使宿主机和容器之间可以共享一个目录,如果本地路径不存在,
Docker
也会自动创建。
-v
宿主机文件
:
容器文件
3.5.2
数据卷实践
这一节,我们从目录实践、文件实践两个方面来学习。
关于数据卷的管理我们从两个方面来说:
1
、目录
2
、普通文件
数据卷实践
之
目录
命令格式:
docker run -itd --name [
容器名字
] -v [
宿主机目录
]:[
容器目录
] [
镜像名称
] [
命令
(
可选
)]
命令演示:
创建测试文件
echo "file1" > /tmp/file1.txt
启动一个容器,挂载数据卷
docker run -itd --name test1 -v /tmp:/test1 nginx
测试效果
~# docker exec -it a53c61c77 /bin/bash
root@a53c61c77bde:/# cat /test1/file1.txt
file1
数据卷实践
之
文件
命令格式:
docker run -itd --name [
容器名字
] -v [
宿主机文件
]:[
容器文件
] [
镜像名称
] [
命令
(
可选
)]
注意:容器里面的文件虽然可以改名,但类型必须和宿主机文件一致
命令演示:
创建测试文件
echo "file1" > /tmp/file1.txt
启动一个容器,挂载数据卷
docker run -itd --name test2 -v /tmp/file1.txt:/nihao/nihao.sh nginx
测试效果
~# docker exec -it 84c37743 /bin/bash
root@84c37743d339:/# cat /nihao/nihao.sh
file1
数据卷实践
之
删除
docker volume rm
docker volume prune
3.5.3
数据卷容器简介
这一节,我们从定义、命令详解、操作流程这三个方面来学习。
什么是数据卷容器?
将宿主机的某个目录,使用容器的方式来表示,然后其他的应用容器将数据保存在这个容器中,达到大批量应用数据同时存储的目的
docker
数据卷命令详解
# docker run --help
。。。
-v, --volumes-from value Mount volumes from the specified container(s) (default [])
从指定的容器挂载卷,默认为空
数据卷容器操作流程
如果使用数据卷容器,在多个容器间共享数据,并永久保存这些数据,需要有一个规范的流程才能做得到:
1
、创建数据卷容器
2
、其他容器挂载数据卷容器
注意:
数据卷容器不启动
3.5.4
数据卷容器实践
这一节,我们从创建、使用、效果查看三个方面来学习。
数据卷容器实践包括两部分:创建数据卷容器和使用数据卷容器
创建一个数据卷容器
命令格式:
docker create -v [
容器数据卷目录
] --name [
容器名字
] [
镜像名称
] [
命令
(
可选
)]
执行效果
docker create -v /data --name v-test nginx
创建两个容器,同时挂
载数据卷容器
命令格式:
docker run --volumes-from [
数据卷容器
id/name] -tid --name [
容器名字
] [
镜像名称
] [
命令
(
可选
)]
执行效果:
创建
vc-test1
容器
docker run --volumes-from 4693558c49e8 -tid --name vc-test1 nginx /bin/bash
创建
vc-test2
容器
docker run --volumes-from 4693558c49e8 -tid --name vc-test2 nginx /bin/bash
确认卷容器共享
进入
vc-test1
,操作数据卷容器
~# docker exec -it vc-test1 /bin/bash
root@c408f4f14786:/# ls /data/
root@c408f4f14786:/# echo 'v-test1' > /data/v-test1.txt
root@c408f4f14786:/# exit
进入
vc-test2
,确认数据卷
~# docker exec -it vc-test2 /bin/bash
root@7448eee82ab0:/# ls /data/
v-test1.txt
root@7448eee82ab0:/# echo 'v-test2' > /data/v-test2.txt
root@7448eee82ab0:/# exit
回到
vc-test1
进行验证
~# docker exec -it vc-test1 /bin/bash
root@c408f4f14786:/# ls /data/
v-test1.txt v-test2.txt
root@c408f4f14786:/# cat /data/v-test2.txt
v-test2
回到宿主机查看
/data/
目录
结果证明:
容器间可以共享数据卷你容器,不过数据是保存在数据卷内,并没有保存到宿主机的文件目录中
3.6
网络管理
学习目标:
了解
Docker
网络模型及其特点
应用
端口映射常见操作
Docker
网络很重要,重要的,我们在上面学到的所有东西都依赖于网络才能工作。我们从两个方面来学习网络:端口映射和网络模式
为什么先学端口映射呢?
在一台主机上学习网络,学习端口映射最简单,避免过多干扰。
3.6.1
端口映射详解
这一节,我们从简介、种类两个方面来学习。
端口映射简介
默认情况下,容器和宿主机之间网络是隔离的,我们可以通过端口映射的方式,将容器中的端口,映射到宿主机的某个端口上。这样我们就可以通过
宿主机的
ip+port
的方式来访问容器里的内容
端口映射种类
1
、随机映射
-P(
大写
)
2
、指定映射
-p
宿主机端口
:
容器端口
注意:
生产场景一般不使用随机映射
,但是随机映射的好处就是由
docker
分配,端口不会冲突
,
不管哪种
映射都会影响性能,因为
涉及到
映射
3.6.2
随机映射实践
这一节,我们从随机映射、指定随机映射这两个方面来学习。
随机映射我们从两个方面来学习:
默认随机映射
指定主机随机映射
默认随机映射
命令格式:
docker run -d -P [
镜像名称
]
命令效果:
启动一个
nginx
镜像
查看效果
注意:
宿主机的
32768
被映射到容器的
80
端口
-P
自动绑定
所有对外提供服务的容器端口,映射的端口将会从没有使用的端口池中自动
随机选择
,
但是如果
连续
启动多个容器的话,则下一个容器的端口默认是当前容器占用
端口
号
+1
注意:
浏览器输入的格式是:
docker
容器宿主机的
ip:
容器映射的端口
指定主机随机映射
命令格式
docker run -d -p [
宿主机
ip]::[
容器端口
] --name [
容器名称
] [
镜像名称
]
命令效果
docker run -d -p 192.168.8.14::80 --name nginx-2 nginx
检查效果
3.6.3
指定映射实践
这一节,我们从指定端口、指定多端口两个方面来学习。
指定端口映射
命令格式:
docker run -d -p [
宿主机
ip]:[
宿主机端口
]:[
容器端口
] --name [
容器名字
] [
镜像名称
]
注意:
如果
不指定宿主机
ip
的话,默认使用
0.0.0.0
,
容器端口必须清楚,而且必须写出来
命令实践:
现状我们在启动容器的时候,给容器指定一个访问的端口
1199
docker run -d -p 192.168.8.14:1199:80 --name nginx-1 nginx
查看新容器
ip
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 0ad3acfbfb76
查看容器端口映射
查看宿主机开启端口
查看浏览器效果:
多端口映射方法
命令格式
docker run -d -p [
宿主机端口
1]:[
容器端口
1] -p [
宿主机端口
2]:[
容器端口
2] --name [
容器名称
] [
镜像名称
]
开起多端口映射实践
docker run -d -p 520:443 -p 6666:80 --name nginx-3 nginx
查看容器进程